const regExpression = require('./AKRegExpression.js')


// 方法: 是否数字
function checkNumber(str, isHaveZero) {
  let regE = new RegExp('[0-9]', 'g')
  //是否已经有 点'.'
  let isHavePoint = false
  for (let index in str) {
    if (str[index] == '.') { //是否为'.'
      // 判断是否有重复逗号
      if (isHavePoint) {
        return false
      }
      isHavePoint = true
    } else if (regE.exec(str) == undefined) { //是否为数字
      //是否为'.'特殊符号
      return false
    } else if (isHaveZero != true && index == 0 && str[0] == "0") {
      //是否第一位为0
      return false
    }
  }
  //循环没有跳出,则返回true
  return true
}
// 结果(只要不是进入bundleFalse方法,就是true)
const isResult = true

// 判断方法
const tool = {
  //判断开始时间和结束时间范围
  isEnableTimeRange(startTime, endTime, splitSymbol, warnNote) {
    let start = startTime.split(splitSymbol).join("")
    let end = endTime.split(splitSymbol).join("")
    let note = ""
    if (Number(start) > Number(end)) { //年 开始日期 在结束日期前
      note = (warnNote || "开始时间不能大于结束时间")
    }

    if (note != "") {
      wx.showToast({
        title: note,
        icon: 'none'
      })
      return bundleFalse
    }
    return this
  },

  //非空判断(数组/对象/字符串)
  isHaveValue(data, note) {
    if (data === null) {
      data = undefined
    }
    let typeStr = typeof data
    let isHaveValue = true
    switch (typeStr) {
      case 'undefined': //空
        isHaveValue = false
        break
      case 'string': //字符串
        data == "" && (isHaveValue = false)
        break
      case 'object': //数组或对象
        Object.keys(data).length ||
          (isHaveValue = false)
      default:
        break
    }

    if (note && !isHaveValue) {
      wx.showToast({
        title: note || "",
        icon: 'none',
      })
    }

    return isHaveValue ? this : bundleFalse
  },

  //判断是否电话
  isPhone(data, nullNote = '手机号不能为空', notPhoneNote = '手机号格式不正确') {
    let isHave = this.isHaveValue.apply(this, [data, nullNote]).isResult
    let isPhoneNum = false
    if (isHave) {
      isPhoneNum = regExpression.phoneRegExp.test(data)
      isPhoneNum || wx.showToast({
        title: notPhoneNote,
        icon: 'none'
      })
    }
    return isPhoneNum ? this : bundleFalse
  },

  //判断是否数字
  isNumber(data, nullNote, notNumbernote, isHaveZero) {
    let isNumber = true
    let note = ""

    //判断是否为0 (解决 0 == "")
    let checkZero = data + ""
    if (checkZero == "") {
      isNumber = false
      note = nullNote
    } else if (!checkNumber(checkZero, isHaveZero)) {
      isNumber = false
      note = notNumbernote
    }
    isNumber == false && wx.showToast({
      title: note,
      icon: 'none'
    })
    return isNumber ? this : bundleFalse
  },

  // 是否价格
  isPrice(data, nullNote, notNumbernote, isCanNull) {
    // 判断是否为null
    if (isCanNull && !data) return this
    //正则
    var reg = regExpression.priceExp
    // 转为字符串
    let checkZero = data + ""
    let note = checkZero == "" ? nullNote : notNumbernote
    const isPrice = reg.test(checkZero)
    if (!isPrice) {
      wx.showToast({
        title: note,
        icon: 'none'
      })
    }
    return isPrice ? this : bundleFalse
  },



  // 检查是否是邮箱
  isEmail(value, nullNote, notPhoneNote) {
    if (!this.isHaveValue.apply(this, [value, nullNote]).isResult) {
      return bundleFalse
    }
    let expr = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
    if (expr.test(value)) {
      return this
    } else {
      notPhoneNote && wx.showToast({
        title: notPhoneNote,
        icon: 'none'
      })
      return bundleFalse
    }

  },

  // 角标是否选中
  isPickerIndex(data, note) {
    let isHaveValue = data != null && data != -1
    if (note && !isHaveValue) {
      wx.showToast({
        title: note || "",
        icon: 'none',
      })
    }
    return isHaveValue ? this : bundleFalse
  },

}

// 创建过渡对象
let bundleFalse = {
  isResult: false
}
// 插入当校验false时的回调-空方法
const funcNames = Object.keys(tool)
for (let funcName of funcNames) {
  if (typeof tool[funcName] == "function") {
    bundleFalse[funcName] = function() {
      return this
    }
  }
}



module.exports = {
  // 结果
  isResult,
  //判断开始时间和结束时间范围
  isEnableTimeRange: tool.isEnableTimeRange,
  //是否有值判断(数组/对象/字符串)
  isHaveValue: tool.isHaveValue,
  //判断是否电话
  isPhone: tool.isPhone,
  //判断是否数字
  isNumber: tool.isNumber,
  // 是否价格
  isPrice: tool.isPrice,
  // 检查是否是邮箱
  isEmail: tool.isEmail,
  // 角标是否选中
  isPickerIndex: tool.isPickerIndex,
}









// // ===== 功能 =====
// //判空
// function isEmptyFun(data) {
//   if (!data) return true;

//   let type = typeof data

//   switch (type) {
//     case "object":
//       let firstSymbol = JSON.stringify(data).slice(0, 1)
//       if (firstSymbol == '[') return data.length == 0
//       if (firstSymbol == '{') return JSON.stringify(data) == '{}'
//       break
//     case "String":
//       return data == ""
//       break
//     case "string":
//       return data == ""
//       break
//     default:
//       console.log('无法识别类型')
//       return undefined
//       break
//   }
// }

// //判断无效数据
// function invalidData(){

// }

// //展示 提示内容
// function showMessage(data, msg, type) {
//   let result = isEmptyFun(data)
//   //判断是否需要展示数据
//   if (!msg) return result
//   //展示
//   result && wx.showToast({
//     title: msg,
//     icon: 'none',
//   })
//   return result
// }

// //回调参数解包
// function isEmptyByMessageBase(data) {
//   //数据解包- 解析回调延时参数
//   return data.length && data.some((item) => {
//     let result = showMessage.apply(undefined, item)
//     //如果判断为空数据, 则返回true
//     return result
//   })
// }


// //柯里化
// function curryIsEmptyByMessage(fn) {
//   let ary = []

//   function next() {
//     let param = [].slice.call(arguments)
//     param.length && (ary = ary.concat([param]))
//     return param.length ? next : fn.call(null, ary)
//   }

//   return next
// }



// // =============== 接口 ===============
// //接口方法- 判断是否为空
// function isEmpty(data) {
//   return isEmptyByMessage(data)
// }

// //接口方法- 判断是否为空,展示数据
// function isEmptyByMessage(data, msg) {
//   //柯里化
//   let curryFun = curryIsEmptyByMessage(isEmptyByMessageBase)
//   return curryFun(data, msg)
// }

// function isInvalidData(data, msg, type) {
//   if (isEmptyByMessage(data, msg)() ) return 
//   type || console.log('type:不能为空')

//   let result = true
//   switch (type) {
//     case 'phone':
//       let isPhone = regExpression.phoneRegExp.test(data)
//       isPhone || wx.showToast({
//         title: '手机号格式不正确',
//         icon: 'none'
//       })
//       break
//     case 'email':
//       let isEmail = regExpression.emailRegExp.test(data)
//       isEmail || wx.showToast({
//         title: '邮箱格式不正确',
//           icon: 'none'
//         })
//       break
//     default:
//       break
//   }
// }

// module.exports = {
//   //判断是否为空
//   isEmpty,
//   //判断是否为空,并弹框提示
//   isEmptyByMessage,
//   //判断是否 有效性 或 为空 ,并弹框提示
//   isInvalidData
// }